{
 "cells": [
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# VPoser Decoder\n",
    "The original body pose space of [SMPL](http://smpl.is.tue.mpg.de/) are not bounded to natural human pose space. That means you can put a vector value as the pose of a SMPL body model and get broken body, that might not even look like a human.\n",
    "To address this you can replace the original pose space of SMPL with VPoser's latent space that corresponds to natural human pose space.\n",
    "The original **body pose space** of SMPL holds 3 dimentions axis-angle representation of 21 joints which in total sums to a vector of 63 elements. The latent space of the VPoser has 32 elements that have a Normal distribution.\n",
    "This means if you sample a 32 dimentional random vector from a Normal distribution and pass it as your pose you should get  a viable human joint configuration. This representation of pose is fully differentiable and can be used in an end-to-end deep learning pipeline.\n",
    "\n",
    "In this tutorial we will sample a 32 dimentional vector from a Normal distribution and using the decoder of VPoser create a 63 dimentional vector that can pose the body of a SMPL model.\n",
    " \n",
    "First you need to obtain a trained VPoser from https://smpl-x.is.tue.mpg.de/downloads and a variation of SMPL model, here we use SMPL+H, from https://mano.is.tue.mpg.de/downloads under *Extended SMPLH model for AMASS*.\n",
    "Put the obtained vposer model and body models in a folder, here we assume respectively\n",
    "\n",
    "'GITHUB_CLONE_ROOT/human_body_prior/dowloads/vposer_v1_0', and \n",
    "'GITHUB_CLONE_ROOT/human_body_prior/dowloads/models/smplh/female/model.npz'\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 1,
   "metadata": {},
   "outputs": [],
   "source": [
    "%load_ext autoreload\n",
    "%autoreload 2\n",
    "%matplotlib notebook\n",
    "%matplotlib inline\n",
    "\n",
    "expr_dir = '../downloads/vposer_v1_0' #'TRAINED_MODEL_DIRECTORY'  in this directory the trained model along with the model code exist\n",
    "bm_path =  '../downloads/models/smplh/female/model.npz'#'PATH_TO_SMPLX_model.npz'  obtain from https://smpl-x.is.tue.mpg.de/downloads"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 2,
   "metadata": {},
   "outputs": [],
   "source": [
    "#Loading SMPLx Body Model\n",
    "from human_body_prior.body_model.body_model import BodyModel\n",
    "\n",
    "bm = BodyModel(bm_path=bm_path, batch_size=1).to('cuda')"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 3,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Found Trained Model: ../downloads/vposer_v1_0/snapshots/TR00_E096.pt\n"
     ]
    }
   ],
   "source": [
    "#Loading VPoser Body Pose Prior\n",
    "from human_body_prior.tools.model_loader import load_vposer\n",
    "vp, ps = load_vposer(expr_dir)\n",
    "vp = vp.to('cuda')"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 4,
   "metadata": {},
   "outputs": [],
   "source": [
    "import torch\n",
    "import numpy as np\n",
    "\n",
    "from human_body_prior.tools.visualization_tools import render_smpl_params\n",
    "from human_body_prior.tools.visualization_tools import imagearray2file\n",
    "from notebook_tools import show_image"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 5,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "poZ_body_sample.shape torch.Size([1, 32])\n",
      "pose_body.shape torch.Size([1, 63])\n"
     ]
    },
    {
     "data": {
      "image/png": "iVBORw0KGgoAAAANSUhEUgAABDYAAAQcCAYAAABu5BscAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAAuIwAALiMBeKU/dgAAADl0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uIDIuMi4yLCBodHRwOi8vbWF0cGxvdGxpYi5vcmcvhp/UCwAAIABJREFUeJzs3cuPZGd5P/Av4JnuuWI7iiJBQswP8BW8ipRNkNgg7Biba1hEyiqLRNlEiZL8G6BsE+UPiLjZxhjMxZiLScgCyQTMGIMvwVxswMa3mekZzG+BnqrTb586XVXdPTOv5/PZ1Jlz3nOpqpZsPfV9n/c1v/3tbwMAAADQo9de7AcAAAAAWJfCBgAAANAthQ0AAACgWwobAAAAQLcUNgAAAIBuKWwAAAAA3VLYAAAAALqlsAEAAAB0S2EDAAAA6JbCBgAAANAthQ0AAACgWwobAAAAQLcUNgAAAIBuKWwAAAAA3VLYAAAAALqlsAEAAAB0S2EDAAAA6JbCBgAAANAthQ0AAACgWwobAAAAQLcUNgAAAIBuKWwAAAAA3VLYAAAAALqlsAEAAAB0S2EDAAAA6JbCBgAAANAthQ0AAACgWwobAAAAQLcUNgAAAIBuKWwAAAAA3VLYAAAAALqlsAEAAAB0S2EDAAAA6JbCBgAAANAthQ0AAACgWwobAAAAQLcUNgAAAIBuKWwAAAAA3VLYAAAAALqlsAEAAAB0S2EDAAAA6JbCBgAAANAthQ0AAACgWwobAAAAQLeuuNgPQFd+e7EfAAAAgEvOay7mzSU2AAAAgG4pbAAAAADdUtgAAAAAuqWwAQAAAHRLYQMAAADolsIGAAAA0C2FDQAAAKBbChsAAABAtxQ2AAAAgG4pbAAAAADdUtgAAAAAuqWwAQAAAHRLYQMAAADolsIGAAAA0C2FDQAAAKBbChsAAABAtxQ2AAAAgG4pbAAAAADdUtgAAAAAuqWwAQAAAHRLYQMAAADolsIGAAAA0C2FDQAAAKBbChsAAABAtxQ2AAAAgG4pbAAAAADdUtgAAAAAuqWwAQAAAHRLYQMAAADolsIGAAAA0C2FDQAAAKBbChsAAABAtxQ2AAAAgG4pbAAAAADdUtgAAAAAuqWwAQAAAHRLYQMAAADolsIGAAAA0C2FDQAAAKBbChsAAABAtxQ2AAAAgG4pbAAAAADdUtgAAAAAuqWwAQAAAHRLYQMAAADolsIGAAAA0C2FDQAAAKBbChsAAABAtxQ2AAAAgG4pbAAAAADdUtgAAAAAuqWwAQAAAHRLYQMAAADolsIGAAAA0C2FDQAAAKBbChsAAABAtxQ2AAAAgG4pbAAAAADdUtgAAAAAuqWwAQAAAHRLYQMAAADolsIGAAAA0C2FDQAAAKBbChsAAABAtxQ2AAAAgG4pbAAAAADdUtgAAAAAuqWwAQAAAHRLYQMAAADolsIGAAAA0C2FDQAAAKBbChsAAABAtxQ2AAAAgG4pbAAAAADdUtgAAAAAuqWwAQAAAHRLYQMAAADolsIGAAAA0C2FDQAAAKBbChsAAABAtxQ2AAAAgG4pbAAAAADdUtgAAAAAuqWwAQAAAHRLYQMAAADolsIGAAAA0C2FDQAAAKBbChsAAABAtxQ2AAAAgG4pbAAAAADdUtgAAAAAuqWwAQAAAHRLYQMAAADolsIGAAAA0C2FDQAAAKBbChsAAABAtxQ2AAAAgG4pbAAAAADdUtgAAAAAuqWwAQAAAHRLYQMAAADolsIGAAAA0C2FDQAAAKBbChsAAABAtxQ2AAAAgG4pbAAAAADdUtgAAAAAuqWwAQAAAHRLYQMAAADolsIGAAAA0C2FDQAAAKBbChsAAABAtxQ2AAAAgG4pbAAAAADdUtgAAAAAuqWwAQAAAHRLYQMAAADolsIGAAAA0C2FDQAAAKBbChsAAABAtxQ2AAAAgG4pbAAAAADdUtgAAAAAuqWwAQAAAHRLYQMAAADolsIGAAAA0C2FDQAAAKBbChsAAABAtxQ2AAAAgG4pbAAAAADdUtgAAAAAuqWwAQAAAHRLYQMAAADolsIGAAAA0C2FDQAAAKBbChsAAABAtxQ2AAAAgG4pbAAAAADdUtgAAAAAuqWwAQAAAHRLYQMAAADolsIGAAAA0C2FDQAAAKBbChsAAABAtxQ2AAAAgG4pbAAAAADdUtgAAAAAuqWwAQAAAHRLYQMAAADolsIGAAAA0C2FDQAAAKBbChsAAABAtxQ2AAAAgG4pbAAAAADdUtgAAAAAuqWwAQAAAHRLYQMAAADolsIGAAAA0C2FDQAAAKBbChsAAABAtxQ2AAAAgG4pbAAAAADdUtgAAAAAuqWwAQAAAHRLYQMAAADolsIGAAAA0C2FDQAAAKBbChsAAABAtxQ2AAAAgG4pbAAAAADdUtgAAAAAuqWwAQAAAHRLYQMAAADolsIGAAAA0C2FDQAAAKBbChsAAABAtxQ2AAAAgG4pbAAAAADdUtgAAAAAuqWwAQAAAHRLYQMAAADolsIGAAAA0C2FDQAAAKBbChsAAABAtxQ2AAAAgG4pbAAAAADdUtgAAAAAuqWwAQAAAHRLYQMAAADolsIGAAAA0C2FDQAAAKBbChsAAABAtxQ2AAAAgG4pbAAAAADdUtgAAAAAuqWwAQAAAHRLYQMAAADolsIGAAAA0C2FDQAAAKBbChsAAABAtxQ2AAAAgG4pbAAAAADdUtgAAAAAuqWwAQAAAHRLYQMAAADolsIGAAAA0C2FDQAAAKBbChsAAABAtxQ2AAAAgG4pbAAAAADdUtgAAAAAuqWwAQAAAHRLYQMAAADolsIGAAAA0C2FDQAAAKBbChsAAABAtxQ2AAAAgG4pbAAAAADdUtgAAAAAuqWwAQAAAHRLYQMAAADolsIGAAAA0C2FDQAAAKBbChsAAABAtxQ2AAAAgG4pbAAAAADdUtgAAAAAuqWwAQAAAHRLYQMAAADolsIGAAAA0C2FDQAAAKBbChsAAABAtxQ2AAAAgG4pbAAAAADdUtgAAAAAuqWwAQAAAHRLYQMAAADolsIGAAAA0C2FDQAAAKBbChsAAABAtxQ2AAAAgG4pbAAAAADdUtgAAAAAuqWwAQAAAHRLYQMAAADolsIGAAAA0C2FDQAAAKBbChsAAABAtxQ2AAAAgG4pbAAAAADdUtgAAAAAuqWwAQAAAHRLYQMAAADolsIGAAAA0C2FDQAAAKBbChsAAABAtxQ2AAAAgG4pbAAAAADdUtgAAAAAuqWwAQAAAHRLYQMAAADolsIGAAAA0C2FDQAAAKBbChsAAABAtxQ2AAAAgG4pbAAAAADdUtgAAAAAuqWwAQAAAHRLYQMAAADolsIGAAAA0C2FDQAAAKBbChsAAABAtxQ2AAAAgG4pbAAAAADdUtgAAAAAunXFxX4AAACSe+65J0nymte8Zttrkrz2tb/7Leotb3lLkuS3v/3t7Njb3va2C/WIAHBJktgAAAAAuqWwAQAAAHTrNcMoI+zCHwsA7MHdd9+dJPnRj3402/fEE08kSa644nczhGvaSb0Ot1955ZUkyblz52bHfvOb3yRJ3v3udydJbr311gN5dgCY8JrdhxwciQ0AAACgWxIbrMIfCwCs4TOf+UyS5P7770+SHD58eHZsUVJj2Dy0tuv/2yq5kSTnz59PMk9x/OEf/mGS5D3vec9szLXXXrtfbwUAxkhsAAAAAKxDYoNV+GMBgBV87GMfS5I89dRTSZKNjY0kyete97rZmDapMZbYqH31/23VV2O43SY3zpw5MxtT/Tduu+22vb8pANhJYgMAAABgHRIbrMIfCwDsolIaSfKTn/wkybyPxqFDh5JsT2zU9qLkRrKzx8YyiY3hyimnT59Okvzrv/7rHt4ZACwksQEAAACwDoUNAAAAoFtXXOwHAAB4NfjoRz+aJPnxj38821fLutZ0k/Z1uL3MVJSxf7fHarrKcLpxTYG55557kmgiCsCri8QGAAAA0C2JDQCAPbj77ruTJE8++WSSeToiWbyE6zCNUduLkhvD85Zp+l5jXnnllR33+PznP59k3mj0fe97367XA4BLncQGAAAA0C2JDQCAPfjc5z6XJNnc3EwynrSY6p+xKLEx1kej0hhtX42hsSVh22sPe3wAQO8kNgAAAIBuSWwAAKzo05/+9Gy70g+VohhLU7THhmMW9d+YSmyM9c+oY2Mrr1xxxRXbxlbK5L3vfe8S7xYALm0SGwAAAEC3FDYAAACAbpmKAgCwoscff3y2PWwEmkwvyTo1FWWssWh73tg96361r6apjDUobd15552zbUu/AtAriQ0AAACgWxIbAAArevTRR2fb1ZizDBMbi5qGji0JO9V8dMqi8WP7FzUqBYCe+a8ZAAAA0C2JDQCAJX3nO99Jsj0NUQmNsaVYa1+bkBjrf7FMeqJd9nW4b53Exxe/+MXZ9u233770eQBwKZHYAAAAALqlsAEAAAB0y1QUAIAltY1Ch9opKcl8esnrXve6ba9j005qCsvYlJLarjHDeyya7jI2XaY9//Tp0wvfDwD0QmIDAAAA6JbEBgDAHowlNcqixqDnz5+fbZ87dy7JPA3Svg7Pr3v85je/2fX+Y0vKTjU6BYBeSWwAAAAA3ZLYAABYUqUrhir1MNY/o01GjC3XWuOr38WhQ4eSJIcPH56NOXLkSJLk7NmzSZKXX355xz3qvEp6DHts1D3qOer12muv3e0tA8AlT2IDAAAA6JbEBgDALu69994kyZkzZ3Ycq8REpSI2NjZ2HKukx9GjR5OMpylqbKUyhj02KmHx7LPP7rhHXbMSIzV22Mej7a0xlhwBgF5JbAAAAADdUtgAAAAAumUqCgDALn7wgx8kSX76058m2b5Mak0lqeadm5ubO86vaSJjDUZr6dY6rxqD1pSUZD51pPZdeeWVs2M1LaUdU81Ik2RrayvJfHpLHRtOiQGAXklsAAAAAN2S2AAA2MVjjz2WJHnppZeSbE86VGKi0hhjS7kOl25ddH4lLSpdUQmQZJ7qqIagw8aida2611gqpMZX0qSe8Y477ph83wDQA4kNAAAAoFsSGwAAu/ijP/qjJMkjjzySZHuPjdYwsVFJiWF6oj2/0hjV92Ls2nXNOjbsn3Hy5MltY+p1bLnYdknYz3zmM7Mx3/ve95IkH/zgBxe+NwC4FElsAAAAAN2S2AAA2MVb3/rWJMlzzz2XZL46SrIzTTHsn1FJjXodpjlKnVev1WNj2Jejrlk9Ns6dOzc7Vtt1jxpb6Yzhfeu1xj7zzDOzMf/v//2/8TcPAJc4iQ0AAACgWwobAAAAQLdMRQEA2EXbfHPYDLSd5jGmnQIyVPueffbZJMmVV16ZJDly5MhsTE0vqdd2+dix5xhOiannrmkrZ86cSbK9weh111238PkB4FImsQEAAAB0S2IDAGAXlWb45je/mWS8MWct2zpMbixKcwyTG5WiqCVc63WY2Dh79mySeVKjGowmydGjR0efeXjPera611VXXbXtukly0003jV4HAC51EhsAAABAtyQ2AAB2ccMNNySZJzU2NjZmxyr10C77msyTEsNeFsOxQ1dffXWS5MSJE0mSRx99dHbs+PHj28aOLQXb3r/uncyXiX355ZeTzNMgb3zjG0feLQD0RWIDAAAA6JbEBgDAkv7kT/4kSfLjH/94tu/hhx9OMp7YaPfV63DFktquvheHDh1Kkrz97W+fjamkRSUvasxQXbvGVD+N4XaNqR4ft912225vGQAueRIbAAAAQLcUNgAAAIBuvWaseRUs4I8FABp/93d/lyTZ3NxMkhw7dmx2rJp01tSReh3+/1dND6kGo2PTTGoqyZkzZ5JsX262zqtmoe2ysUny4osvbrvXe97zniTJe9/73uXfKAAs9prdhxwciQ0AAACgW5qHAgDswVvf+tYkyf/93/8lGW8eWtplV5N589BKatSYavCZJFtbW9uuM/x3nd82CB1b7vVNb3pTkuTNb37zsm8PAC55EhsAAABAtyQ2AAD24C1veUuS5IknnkgyntioVEW9Hj9+fDamkhaHDx/e9jqmkh4vvfTSbN+w30YyT2oMUx3XXHNNkuSf//mfl3pPANATiQ0AAACgWxIbAAB7UCuVVFJi2NuitivFUemKSmkk8xRHjaljwx4b1SOjxpw4cWJ2rL1m+5pY/QSAVzeJDQAAAKBbChsAAABAt0xFAQDYg1rmtRp6bmxszI7VFJJq5HnFFb/7X6+afpLMp5zUax0bTmmpJqQ1ZtigtO5RU0/Onj2bZPuSrjfccMO6bw8ALnkSGwAAAEC3JDYAAPagmnceOnQoybyZaLIzhdGek8xTHPVax8YSG2MNSisNUkvBVnLj1ltvXf9NAUBHJDYAAACAbklsAADsQSUsDh8+nGSenEjmSY12SdfNzc3ZmNpXKYwaWymN4bG2n8ZwX/XWeMMb3pBEXw0ALh8SGwAAAEC3FDYAAACAbpmKAgCwB9UgtKai1L+T+bSUmi5y5MiRJNuXa62pJ3XecApKqakobaPQ4bHnnnsuSfLOd75zT+8HAHojsQEAAAB0S2IDAGAPfvjDHybZuWzrUCUtnn/++STzRp/JfHnYSnPUsrFDldCo8yoBMjx29OjRJJqGAnD5kdgAAAAAuiWxAQCwB5WwqGVfq2dGMk9RVIqjkhv1msx7Y7z44otJ5r06hr02huPbf588eXLHeAC4nEhsAAAAAN2S2AAAWNFDDz00266ExljSolRiY2NjI8l8JZNkPMXRjqlrVyrkxIkTs2N1v+F4ALicSGwAAAAA3VLYAAAAALplKgoAwIoeeeSR2XZNBalpIq997fx3o9p+5ZVXto0dU1NJauxwakqdV8eGDUprX71a7hWAy43EBgAAANAtiQ0AgCXdeeedSZIHHnhgtq+WW60UxVhio17HxtS+ej1//nySeQIkSc6dO5dknuoYJj9qe5jiAIDLicQGAAAA0C2JDQCABSqh8YUvfCHJfLnWQ4cOzca0vTWGSYs2jVHpirFUR6mlYYf3qKRGXWe4tOtU3w4AuBxIbAAAAADdktgAAMg8nTFMSvzXf/1XkuTqq69OMk9KDBMTq/TPmNKmOoZJjOEztfc/e/bstvM//elPJ0ne//7373pPAHg1kNgAAAAAuqWwAQAAAHTLVBQA4LJ01113JZk36/zmN7+ZJDly5MhszNGjR7edU41BX3nllR372ikpw31TFk1BGV6n7jE2taWepZaJ/exnP7tjzPve975dnwMAeiWxAQAAAHTrNZYIYwX+WADo0t13350k+dKXvjTbV8mMzc3NJPNUxNhyraXSEcP/f6oxY+ePpTgWqWtXY9BhKmTR2CTZ2tpKkpw5c2bbv+s1Sd70pjclSf7lX/5l1+cAgDXs/h+6AySxAQAAAHRLYoNV+GMBoAvVP+PrX/96knmKotIZyTxN0SYthomLMrYEa2vd5V7ba4+lQtqxw+Veq7fGuXPntp0/THXU+De+8Y1Jkne/+91JkhtvvHHhcwHACiQ2AAAAANYhscEq/LEAcMn5xCc+kST5xje+Mdt3+PDhJMnGxsa2fw/TFLXdvi6Trhgzlc5o9w2vM5XQaMe3qY5knsZoe3OM3aPSHdWP42//9m9nY6677rqF9weAXUhsAAAAAKxDYQMAAADolqkorMIfCwCXjHvuuSdJcv/99yfZ3hi0pp5UI9B2usnwWDuFZJmpJOseG5tKssjw/9GmpqK0zUKnpqLUdJWaknL27NnZmHe9611Jkttvv33XZwOAhqkoAAAAAOu44mI/AADAbu6+++4kyRe/+MXZviNHjiRJjh07liS54or5/9a0SY2xpViXsSjFMfz3KscqRTF8jkXp2anExvC6da1KY9Sx4fnt+x97X5V8qX3vfe97R58LAC41EhsAAABAtyQ2AIBLViU1vvKVryRJTpw4MTvWLuFaKY3hvr0u4domJKb6b4ylQqaWed3tOcYSG2O9OWpf2zNkOLbdd+jQoR3PV8/95S9/edv1JTcAuNRJbAAAAADdUtgAAAAAumUqCgBwyfnMZz6TJPna176WZD4FZTjdpLbbRqHtdjI+haSd+rHMNJMxU1NIphqLLrrX2HVqCsnY89R7bccMP4M61o4dfp7l+PHjSXY2E02S2267beHzA8DFIrEBAAAAdEtiAwC4JHz0ox+dbT/zzDNJdi7lOpbYGGsQukpSYsoqy72uku5Y93mmrjmlXQJ2LNXRXufo0aNJki996Us7xmgoCsClRGIDAAAA6JbEBgBwUX3sYx9LkvziF7+Y7dvc3EyyM6lR/06WW8q1TPXPWGXsKj0yhqb6cCxz/lQqZJl0yqKkyPA52uViS6VmEkvBAnBpktgAAAAAuiWxAQBcFJXU+NnPfpZk3tMhSQ4dOpRktZVPxqySsNhrKmOvfTNW6ZWxzKooyzzb2Gc49T7avhvnz5+fHXv/+98/+ewAcFAkNgAAAIBuKWwAAAAA3TIVBQC4oB555JEkyY9//OMkycmTJ5PMp58k8yah9bpu08xlTE1BWaXB6DL3WGa6yTLXmXrWdmrKcF/df2zaSttgdOozP378eJLkgQcemB279tprkyQ33njjGu8MANYnsQEAAAB0S2IDALig7rvvviTzRpRtOmO4XU1Dy7KpilUacS67f7djy1g3udGeN/YcbVJj2Bi0TWq0CY6xa47dq32O4VKwX/jCF5JIbABw4UlsAAAAAN2S2AAADtwPfvCD2Xb11qg+De2SrsPtqX4PrakUxH6lMKYSE+tadK11+3FMPdvU0rDt/cbSJVPXfuaZZ5Ikd955Z5Lkfe973yqPDQBrk9gAAAAAuiWxAQAcuOqrkcxXP6n0QKUzhj0h2hU+DiKpsZexe7Xu+1nlWst8LsMxY3032uvXseEKNu2xb33rW0mSra2tJMlf/MVfTL8BANgjiQ0AAACgWwobAAAAQLdMRQEADsxDDz2UJHnsscdm+06ePJlk5xSUsakorbFpEatM69iv6SbLNtRc95q7mWr6ue6YqX3tsbEpKe2Sst/85jeTmIoCwMGT2AAAAAC6JbEBAByYI0eOJNn+y/6ipVz3U6UH2lTHVNLiIJZyvRhWWaZ1mQajy6Zk6juuxMbGxkaS5OMf//hszIc//OHd3wAArEhiAwAAAOiWxAYAcGBqmddKaSR7S2qMJQzadMaifclyfTwOon9Gz4afQZsGGX6e5fDhw0mSc+fOJUl++tOfHvQjAnCZk9gAAAAAuiWxAQAcmMcffzxJcvTo0dm+NrGx114b7Wocw32rrDRysY31xtiP6x3ENet1+Jm3q9tcccXv/jfzJz/5yb7cGwAWkdgAAAAAuqWwAQAAAHTLVBQAYN899NBD2/491rRzlSkoU1MpajrEb37zmx3j69pjTS57tszUkqkxy0zVGfvM2u9qOKY+//YzH34v3/3ud5MkN9100+SzA8AqXl3/lQcAAAAuKxIbAMC+q8aRY4mJvSzzOjy3TWqcP39+x/hDhw6tfK+Lba9NRFc5b2zs1Pcz9j0sMpbIebUlZwC4NPivCwAAANAtiQ0AYN+dOnUqyfQv9Kv01hhb0rWSGufOndv2mswTI2zXfp7DxEZt13d2EImR//3f/02S3HDDDWtdGwDGSGwAAAAA3fJzBgCw79reFuv01Ujmv/5XOmOYBqiExksvvZQked3rXjc7dvjw4T3dt71/GbveMmMuNWOJjWEaZmj4uS66zvD8eh1LblgNBYCDILEBAAAAdEthAwAAAOiWqSgAwL4bW+pzHe2SrvWaJM8++2ySebPLmn4y3Nc+z15NNcYcW6Z1L0vbLnvfvRhrxlr7qgHrcCrKVPPRdgpKOzWlHQ8A+0ViAwAAAOiWxAYAsO/2KyHRpiAqpZEkL7zwQpLkqquuSrJ9iddlEiN1zf1OVUxdbyzVsVerXGuZ5XPrGSv1sqipaHvvNqEx1vAVAA6CxAYAAADQLYkNAGDf7dev9O11Xnzxxdn28ePHkyQbGxtJtvfVWJSaGOt/sUzSYpn3s0qKY2zsMmPWtcy1avnc6qlRCZip9zVMcyxa7rXtdwIA+81/aQAAAIBuKWwAAAAA3TIVBQDYd+10hHWnVdQ0hl/+8pdJkiNHjsyO1RSUmjqx10ah6zThXPfY2HOsO91l0bFVP/N2Kskyn+sy9x8u0QsAB0FiAwAAAOiWxAYAsO9WSWyMLc1a208//XSSeWPLSmkkqycKWntZ7nV4Tvse101jjF17HesmT2r77NmzScY/30rQ1OvY+Ytek+Smm25a+tkAYFkSGwAAAEC3JDYAgH1XfRXa5Ea7vZsXXnghyby3RqUIknlqYN2EwzLntUvC7vV6ZWzZ2WXH78VUgqae4/Tp00nmn28t+zpm6tnru7/mmmvWelYAWJbEBgAAANAtiQ0AYN9df/31SZIHH3xwrfNffvnlJPO0QCUDKkUw3B7r0bGOqfOXOTaVgtjvxMeqVrn/oUOHkoyvZrLMZ133qsRG9UcBgIMisQEAAAB0S2EDAAAA6JapKADAvqtpDKtMxRj65S9/mWT96SbtuKnz92sKyDL3WLcJaHv+MtcZGzO1FGv7/DUd6KqrrpqNab+Psaaw9d3X6y233LLrswLAXkhsAAAAAN2S2AAA9t073vGOJPMGkquq89oUwTANMXWsLJP4WKYR5pRVGovu19Kuw+u046eSGu2/xxIX9ZnVdzC2xO7UPdqmo2NNSAFgP0lsAAAAAN2S2AAADsxU+qBNL4ylB1bpSTGW5mj/vUxiY6zvxCpWvccy57eJj2XOXyW5MXZsa2sryfYldiu9UWmO8+fPz47VvkpovOlNb0qS3HzzzQufFQD2g8QGAAAA0C2JDQDgwEwlC9pjw34cV1zxu/9FOXfu3LaxUwmDoUX9N5ZJYEz1r9gvq/baWKZXxyrPuszYw4cP79i3TMqmUhxWQwHgQpHYAAAAALqlsAEAAAB0y1QUAODA1JSSZQynNVQDyrYh5fB66zQY3auxe63TYHQZqy5Du9elZdvP89ChQ7uOGR5rG4pee+21u94fAPaDxAYAAADQLYkNAODArLtc61VXXZUkeeqpp5LMlxkdJjbapUeHzUfbZqHLJBymnrnddxANRldXmRKoAAAgAElEQVRtbLrbmFUatw731evGxkaS7Z9rbdeY4bFKarz5zW/e9RkBYD9JbAAAAADdktgAAA7MWMJg0RKsr33t/PeWSmPUay37Wv8ejm9fhypZUEmPdftOtP8eXmeVdMgy9prcWOVeY++17WcylthokxvJPLFx6623Ln1/ANgPEhsAAABAtyQ2AIADs25SoZIZJ0+eTJI8/fTTu54/TA9U2qBSHJUwGKY6Fj3bqj026pp7TVEsSrIse/4y92z7aEylMeqzH1qmx4bVUAC40CQ2AAAAgG4pbAAAAADdMhUFADgww6kKrampF4cOHdr2+vrXvz7J9ikpx44d23aPano5PK+midTUlrGpKKssjzp2nUVjF723Raaaqa5ynbHnaKegjE0lqc+vvcdwTDu1Z3jMMq8AXCwSGwAAAEC3JDYAgAOzTtIgmScjKpVx9uzZJMnx48dnY2oJ2GeeeSZJcuLEidmxw4cPJ9mZ3BimINqmn1NNO9uExjANMbb0aXv+1OfQnrfMs45pUxjDBEu7r16r4Wcy/zyHn2OrTWoMz7/lllsWngcAB0liAwAAAOiWxAYAcEGtkt6oZVsrRTBMCFRCYWtrK0ny61//enasEh91fiU3av9wu+3DMbaUax2rJMhUj43hsXrGZRIb7ZK0Y4mNqeRGXadNZQyvXZ9fpTPqdWhzc3Phe5tKbEz1KAGAgySxAQAAAHRLYQMAAADolqkoAMC++853vpNkuiHnKo1Fa0rJ0aNHZ/tq6kNNnahGo8NjU40961g7TaWmmwz3tc8+tpRqe912e5G2sed+TUUZPlftq2k71Yy1/p0kv/d7v7fw2u092uVvk+S6665beB4AHCSJDQAAAKBbEhsAwIFZd7nXVtuEM5mnFyrNMaZt8jlMGLTph7E0xDLP3yY2xpaCrcRE/bsSE8m8AWe91tjh+1q0NO3Ys7UNPpN5k9D2XldeeeXC9zWmTcK84Q1vWOl8ADgIEhsAAABAtyQ2AIB91/aiGCYnVklBLLOE6Nj1FqUxlulbMfasi/49dmys/0bb62PYx6PSE9Xv4syZM0mSl19+eTamEhdjS9Iuuv9wudfarmv+wR/8wY7rrJKqqetdc801S58DAAdFYgMAAADolsQGALDv1ulbMZZ0mEpujCUk2vOnEhftc6zbY2PRc42dP/ZclcKo11qlZWNjYzbm9OnT216HPToqDVKpjrHnqGtOraqyyFTPkOuvv37p6wDAQZHYAAAAALqlsAEAAAB0y1QUAGDf/fCHP0wyPb1jyqKmoXu9zjLNSA/SWIPSUsu71rHh0rQ1leTIkSNJppeLHZu+U8dqusq6U1Fqu70nAFxMEhsAAABAtyQ2AIB999hjjyXZ2bQyWZwWmEpTVLPKdZcnvVhJjVXu2zYaHWswOna9OlafcaUyhsu9LnqeZZbcHdtXTURvuummhecDwIUisQEAAAB0S2IDANh3lSJo+0Yk6y2hWsZ6Uyxj7F4XI8UxtXzt1BK3lZBYZvnb+oyGiY29JDXGnuPNb37zwvMB4EKT2AAAAAC6JbEBAOybhx56KEny85//PEly7NixJPPkRjJPc6yS2KikwLqJjYu9GsqURQmJsdVI6nOo1+F2jRlbiabG1GoqleYYrrxS59d5Y89R51UfDwC4FEhsAAAAAN1S2AAAAAC6ZSoKALBvvvzlLyeZT3FoX5P5VIl2WslwekVNhxhbsrS1zJSWdRqVHqRVm4dOHSv1ebZTUpL5+6/PeGtrK0ly+PDhhc9RY4ffwfnz57cdA4BLgcQGAAAA0C2JDQBg31QyoBIaY40sS9uscmxMJQPGjk2lMNpjq56/39ZZ5nUqsTHUNvtsv4Ph9qFDh5LMm4hWc9cxY4mN+j5vvPHGhecBwIUmsQEAAAB0S2IDANg3TzzxRJLk93//95OMJzbapMRUGqHSAlOpjr0mNy6GZfpnDMe0S7qOvY9KZYz12Kjldut1KjlSn3n9u1Iew/N/9KMf7foeAeBCkdgAAAAAuiWxAQDsyalTp2bbJ06cSDJPD0wlJNrUwFRiY9gvYhVTSY8Lqe2DMWaZlU/a600dG46p9EalL2p1k3Pnzs3GbGxsJJmnMuqc4Wdf43/6058mSR5++OHZsRtuuGHhMwHAQZLYAAAAALqlsAEAAAB0y1QUAGBP7rvvvtl2O2Wkml7W1Idke1PLZHxaxdbW1sJjU+e1x6aah64y5kJadSrKomasw8+5tuu1xtSyr8nOqSj1XW5ubs7G1PdZYx5//PHZMVNRALhYJDYAAACAbklsAABr+e53v5tk3kgySY4ePbptTCUD6pf+4XabLBgmDKbSCousm+5YZcwy1nn2Za+516Vt25TKsHlo3aOSG9VodKx5aCU2vvrVr86O3Xrrrcu8FQDYdxIbAAAAQLckNgCAtXz+859Psly/h7EUQ3uslnZN5j022rFTKYSxfYteF+07KKukOJZ5rnWfudIy9TpMyRw+fHjbayU1hs9e4yuxceTIkdmxz33uc0mSW265Za1nA4B1SWwAAAAA3VLYAAAAALplKgoAsJannnoqSXLy5MnZvpq+sGhKSrJ4OsRwTDt1Y9Xmn5fqUq7rWuVZx6b/tI1az5w5k2Q+pSSZNwatKUFj30v7uVaj0ST52te+lsRUFAAuPIkNAAAAoFsSGwDASk6dOpVk/mv9cDnQsaVbk+nmmefPn98xpraH115kmcagUw059zu5Mbzeove9SsPTsX1T6Zap+1VCY3NzM0ny4osvzsZcffXVSeaJjWGao71Ofb/D76eajt59991Jkttvv33X5wKA/SCxAQAAAHRLYgMAWEkt61m/6I8lNqa0CYP6dyU32msm0ymGMVO9NVYZcyEseo7h/rF+F62pviRtYqP6mxw6dGg25uzZs0m2L7vbXqft1TH8vutaDz74YBKJDQAuHIkNAAAAoFsSGwDASp544okkyetf//ok23+1n+oF0WpXR6nX4TWXSWUs05Oi3T/lIJIby3wee13BZSqxUQmY+owruXH06NHZmGeffTZJcvz48STzPhxj328ZS2zotQHAhSaxAQAAAHRLYQMAAADolqkoAMCuHnnkkdl2TTWo6Q1TUxXK2PKk9VrNKofNQ48cObLtesss17pKM9GLZZUpKatORWmXYh3eo76rRZ99kpw7dy5J8vzzzydJTpw4se16U/cabtffxwMPPJDEVBQADp7EBgAAANAtiQ0AYFe1xGuyM7ExlSZoEwLD7WpkWamBYXpgUVJj3RTDXsdcSPv1XseSFrWvvrvhsrrVSPT06dNJ5gmOajQ69mxjDUpr/LFjx5Ikd91112zMHXfcsev7AIBVSWwAAAAA3ZLYAAAWeuihh5IkTz755GzfyZMnkyy3JGtZJrFRCYH9sEoKo55nqv9Fe73hmKlj7b5lemssc/+xay+zXGx9Z/U6TGNU4qJ6bFRyY2NjY8d1xnps1HPUNdvlXwHgoEhsAAAAAN2S2AAAFtrc3Eyy/Zf99lf/sTRBm8oYphDaVVDqtXo8DK+5zKooF8JU0mLq2DIWJTWG73WZpMfU/kWJjbEVber7+PWvf50kOX78+I4xY99H27+jEhtf//rXZ2Pe8IY3JEluvvnmhe8HAFYlsQEAAAB0S2EDAAAA6JapKADAQvfee2+S8akoqyzzOlzKtZ2KcubMmSTJVVddtdKzTTXL3G+rNkid2rfbmLGpKVONRVtTy8W2393Ycq019eSFF15Ikmxtbe0YM9Y8tN1XfzPD5qNPPfVUElNRANhfEhsAAABAtyQ2AICFHnvssSTJlVdeOds3/JW+tSipMUxsVFKjXd516rpTiYmLndRox67aTHSdNMaUseVf2/PGmodWGqOSFr/85S+TJC+++OJsTDUEHbtum9hom4gmyVe+8pUkya233rrr+wCAZUlsAAAAAN2S2AAAdjh16lSS5PDhw0nGeymMJQ0WJTUqpZHsTGpUT4exX/8vZB+Ng7BOGmMscbHXNEd9f7X87lRio/bVd1a9NpKd39XUdzaW2Dh27FiS5LOf/WyS5M///M93fV8AsBuJDQAAAKBbEhsAwA71i3r1WxhLbIylCCoR0CY1himNs2fPbjt29OjRtZ7xUk1vrJq0WGXsXt9zm6oYXm/RiilPP/30bEz1WhlbGadNarT/TuYJoK997WtJJDYA2B8SGwAAAEC3FDYAAACAbpmKAgDs8OSTTyaZN4tcZonXZPEUlK2trdmYM2fOJEmOHDmSZD49YaoR5aJmorsdW8VU085Vrj3WTHWdMUN7XXa2pghNfZ7tcq1/+qd/miR54xvfOBvzP//zP0nmDUGnvo+xBqU1tWljYyNJ8qlPfSpJ8oEPfGDp9wcALYkNAAAAoFsSGwDAzHe/+90kO391H/tlv13adbjdJjUqpTFUv/rXr/hjlklqLGOZJVTHkg6rLNe66LrDfatcZ+rZpr6PqfPbfy/T/PMv//IvZ2N+8pOfJEmeffbZ0esmO9M9wzFtYuPBBx9MIrEBwN5IbAAAAADdktgAAGbuvffeJPM0RfvrfbIzfTBMbLRJjVra9Ve/+tVsTPXWWLS8aLs9tGxyY1FCYSyN0b6vdZdrHbPXpEZrrNdJ+9zrJDfG7vHoo4/uOPZP//RPSZJ/+Id/2HGvRemaYSKnrl1/X/W38IlPfGI25kMf+tDC5weAMRIbAAAAQLckNgCAmVqhpH5lH+uxUcYSG21Pjeeff37b/mS+Qkftq39XOmR4v1V6bKzbh2OVxMOq1klsrLrKyzpJjWVMrYTz13/910mSf/u3f1t4j7H3Ud9x/X1tbm4mSb797W/PxkhsALAqiQ0AAACgWwobAAAAQLdMRQGAy9zDDz88237ssceSJCdOnEgy3ayyXdo1mU9BqWkmzz33XJLxaSZ1/ksvvbTtnovuOzx3t33rGGseutvY/RjXTtnYr6kwU409l3mPU2Pe/va3J0ne9a53zfZ99atfHb3H8Lus7XqtqU/VZDZJPvnJTyZJPvjBD+76jACQSGwAAAAAHZPYAIDL3D333DPbrl/Qx5Z5LdXs8/z580m2/9p++vTpJMnPfvazbecMr1ONI+u10h0vv/zybMyxY8eSzJcFHTOVKNhLimM/m4e2lll2duq8MYued9XrLhr//e9/f7Z9/fXXbzv2gQ98YMf5DzzwQJJ5KmOY1mn31Wv93SXJt771rSQSGwAsT2IDAAAA6JbEBgBc5p588snZdttbY+xX/OqNUUmLSmkkyQsvvJBknuIY/hJfKoXRpkKGS8JWCqHOr9eNjY2F72OvvTamemzsd4pjmbTJuu9n7H0s6rExHNP2vyinTp2abbeJjaH3v//9Sebf61e+8pUd16v71fc4ltiov49PfepTSbanQgBgjMQGAAAA0C2FDQAAAKBbpqIAwGWqmkIOp3dUQ892Kko1DE12Ng2t6SdJ8qtf/WrbefU6bCB58uTJJMnm5ua2e43do15rGdmrrrpqNqamLOx1ysay+/eifcaDaHzaTkFZZrnXsekqY00/V3H77bcnSX7wgx8kSX7+85/PjrXXriko9XeXJEeOHEmSfOMb30hiKgoAu5PYAAAAALolsQEAl6n77rsvyfYlVRc1kKyGocnO5Vlvu+222bH/+I//2Hb+WPqgEhvHjx9PMv/1fpjYqDTIuXPntl1nOGavzUKXsZelVJe1SpqjjD3XWFJjlXu1KY5KUaz7Xv/xH/8xSfL3f//3s331XbfJoGE6pP4eK7lx1113JUnuuOOOtZ4DgFc/iQ0AAACgWxIbAHCZufPOO5PMl3mtX8aT+S/nbd+LSk4k8zTFNddcs+Pa9et+XbN+mR8mPtp71DnD5EhtV/pgLEmyX8u7Lvr3sueu0i9jainXZZIbU8+4zPO3fTimEhv1WT/yyCO7XnfK3/zN38y2//3f/z3J/O+iTW4M91UPllo2VmIDgEUkNgAAAIBuSWwAwGWmkhpjK1K0vTXKMHFRK5TccsstSbb/ol+/9tdKK3XtSnkMx7T/nkoPTCUdxiyz4sl+rX7SpiBWtUqPjbrXsNdI7Wtfp+61SnKkVjdZ14033jjbfuc735kkefDBB5PMkz1jCZhK7Rw7dixJ8qlPfWo2xkopAAxJbAAAAADdUtgAAAAAumUqCgBcJk6dOpUkeeKJJ5LMpwEMl9qs7amlQ//4j/84SXLzzTcnSe6+++4dY2oaQb0Op060TUNXmYqyrGWWPm2tO7bez35PSRmqz69el5luMja9Y+oe7TSkdT/7KTWF5Ktf/WqSeVPamhaV7GwuW39DwzEAMCSxAQAAAHRLYgMALhPVALR+CW9/GU92/jpf52xtbc323X777QvvUSmBunb92j5sUFrbyyyTum5qoE1PrLJM6jJjl01DrJPiaNMZy96/NdzfvqeplMyiRE2SfP/730+SXH/99cu8lYXe9a53JUm+9a1vJZk3mx27bz3P/fffPxtz22237en+ALy6SGwAAAAA3ZLYAIDLRC3buUwaopIa58+fTzLvhZAk3/ve95IkN9xww47zK6FRv7LX6+bm5mzMsKfHoudY9GzLLIU6HLdO34yxc6ZSHZWsWOV9jF1rKqmx6F6Lnre1l34Z+9ljo1Ti4+tf/3qS7csB1/tp/4aGqY6Pf/zjSZIPf/jD+/5sAPRHYgMAAADolsQGAFwm2hVPxlINlQioxEYZ9uGoVVA+9KEPJZn3XUiS17/+9aP3Gq5osV+pgfb5x1IMqyQ3xhIbi1IcY2Pa3hTDfVPP037mU3002pVL2vuNPeteHURi46677tp27WFKZSyVkmzv0zJMbwCAxAYAAADQLYUNAAAAoFumogDAZeKHP/xhkumpBTUNoJ3OUE1Bk/l0k09+8pM7zq9xU9MIlrHKMqlj0zsWTVNZdZpJ28hz7JyaHlJjh81R2/FtU9bhsTp/bErLQUwH2c3Y9Jf9Wu51UZPZZOdn1T5Pktx3331JppceBuDyIbEBAAAAdEtiAwAuE0888USSnY0Xh6mE9lf6SlqMNea8//77k2z/ZX3YJLQ971LVJiamUh3t2OG+SmoMj9XnWMvltg1Ch+Pr/FXSKvtpL0vCLuuhhx5KMk8Ptc1mk52JlbFmokeOHEmS/Od//meS5CMf+ciBPTMAlz6JDQAAAKBbEhsA8Cr28MMPz7bbZUnL1C/09Uv6sEdG9Ueo12H6YGtra/Saba+Kof1ennRdY2mMNsUx9j4WLU+azD+Peh3rKTFMK1xMi3qO7Kf6jOpvpxI+w7+vtmdJe24y/8w2NzcP7FkB6IfEBgAAANAtiQ0AeBUbpgEW9VAY/kJfv6TXeWPntD0hhj02fvGLX2y7dp03tgpIa2pVk3b/qsbSCMusitL2xFgmzXD69OnZ9pkzZ5LM+5q0aZkxY595u2+vn8N+j11WJYgqaTG2Wk7b16W+g2GCo8bU6ih33HHHvj8rAP2Q2AAAAAC6pbABAAAAdMtUFAB4Fbv33ntn24umL4xNeagpE+3UlGT71JMkOXr06Gz7xIkTSeZTMGo6w3AqSi19utemmfs9VWJsudfSTkkZTimp85577rkk299XfX7tZz81zeQgLJpus+rUnOuvv35PzzE29STZ/vdRS7nW51if9fA5anyN/cQnPjE79qEPfWhPzwhAfyQ2AAAAgG5JbADAq9jjjz8+265fy9tfwseW0WyTG2O/7J89e3bbOcm8KeSwgWayvfFjpTkqzTB1j/1sFrrb2LFnbRtXVlLg+eefn42p93ry5Mkk29Mc7Wc8lc6YGrPMefudYBm73l7vseizvvrqq2f76rNtP89h2qOWia2/wWrOCsDlSWIDAAAA6JbEBgC8Cn3nO99Jsr0fRrvk6FgKoH5Rr1/SX3rppW2vSfKOd7xj2/X++7//e3asUhjV+6D6Tlx55ZWzMVtbW9teF/VdGD7PQfafaO81TGzUdj3ro48+mmSeJkiS48ePJ9mZhEkWpzDG0hiLzhmzX0mWVXts7NVjjz2WZP4Z1ef7Z3/2ZzvG1NKw9bc0fM/1N1PX+dznPjc7VikOvTYALh8SGwAAAEC3FDYAAACAbpmKAgCvQl/84heTbJ8WUVMl6rWmGAyngtTUgFqStRpjfuQjH5mNufnmm7fd60c/+tFsu6aeVJPN4f1L3beaiNbzDJeNbaegjE2HaKdjTE2ZWHc6RZ1XU3rqcxleb2pqzzJNQ9ux61rl8xizaApKu7zvXtTfWrsM8PBvqrbrb/F73/tekvmUn+F1SjWtTZL77rsviakoAJcTiQ0AAACgWxIbAPAqVCmKauaZzH/lbn81H/tFvvb91V/9VZLkuuuuW3iva665Zrb97W9/e9u++iV9mOpo71GpkOGz1nKeezXVCHNRomGqsWelS972trfN9j399NOjYxftW8cyyY9VEhpTy+FONRi94YYblr7HmFOnTiWZ/11MLdP6gQ98IEnyi1/8Ikny61//+v+3d2/NkpXlHcD/zJmBSEIElYOBOe7Zw4yplJUqjJoTBxmDIqDk8BHyHbzzMjf5BFZ5CzGWQ0CcKTMlGg+VsioIgwIO40CQqGChwpwrF9TbvXrt1Wu69+7ee7+b3++mV69e3f12z1BMPf1/n2fwWPlzKE1dm81py9+nJ554Ikly3333rWjNAKx/EhsAAABAtSQ2AGAD+frXv55kaR+N5rmShii/gHeNWy3jXfuSGkVzPOrp06eTDEd0lhRG16jOdmKkjOlsPm+5lpNe6LrfHgHb1/Nj0nNtyxn3Oit9417LZ96zZ8/M3q/0vSjJjb7ERvEXf/EXSZJHH310cO6aa65JkvzxH/9xkmGvjiR5//vfn2TYa6OkOj772c+uaO0ArF8SGwAAAEC1JDYAYAMokyO+//3vJxn+6t78RbykKEpi47e//W2S5Prrrx9cU375/sAHPjDxe5deCEnyta99LclwekjR7JkxLiHRTGyU60svhnn0lOjrJdG+pkxwKd9P8/Mtd+LKrLXTJNMmPsZ9H7P8fHfddVeS5JZbbkmSLCwsXPE5i4uLSZKPfvSjg3PPPPNMkmH65/XXXx88dsMNNyRJ3n777STDCUESGwAbl8QGAAAAUC2FDQAAAKBatqIAwAbw5JNPJhluPSnNN8voy2S4jaJE9NsNMZt27dq1rHWUuP/jjz+eZLJtHl33y7aUdsPTpkm2WixnG0XXc9pbaw4ePDg4/va3vz3yvElGqC53jfNsKNpuGtq+naVJtqC0NccK//d//3eSYRPR5rjXTZs2jTxWtquUv5NJ8ulPf3rq9wdg/ZLYAAAAAKolsQEAlSoNQ5PhSMtf/OIXSYa/br/xxhuDa/7oj/4oybBpaEkhlF+4m5bzi3oy/HW//et/X9PO9vnm2kripKyxbwxs13v0veckzTLLcVnPtMmTcWmMaZMk40bCdr1m30jaSbRfZ7003SxNRJPktddeS5L86Ec/SjKa6Cn/DZQGpeXao0ePDq6R2ADYWCQ2AAAAgGpJbABApb773e8OjkuiYOfOnSP33/e+9w2uKamHku4o/Su6EhvtnhKTeuihh5IM+xl09WloJwnK+5f1NK8pfUHKmpuJjZWOIZ0msVHev9z//Oc/P7jmxIkTV3z+rHpszFrfWi9durQma5rEr371qyTDv6fNsca/+c1vkgxTS+XzlHHHSfLUU08lSe655565rxWA+ZPYAAAAAKolsQEAlXn22WeTJG+++ebg3EsvvZQkOXToUJLk1VdfTZLceOONS55/3XXXJUl2796dZPgLdzL8lb68znJ95jOfSTLsa9CV2Ci3JYVRplckw6RG0ZXYaE9KmbaPR1vXc8o6yrnmNJSi3Udk2j4eV1rzPEzyPRQHDhyY93Km9sgjjyRJvvjFLyYZTWOUBFCZ/vOBD3wgSXL27NnBNb/85S9XZZ0ArA6JDQAAAKBaChsAAABAtWxFAYDKfPvb304yHIWaDLeQlO0cZaTrTTfdNLimbJko4zuffvrpJa/9oQ99aCZrLOtpj31tHzfX3NxaUs6VLSjlOeV+Mtxy0NzCMs4kWz+6toKcO3cuydItKU179uxJkrzyyitLrpmmQemsTduotL229nag9ejOO+9Mkpw8eXJwbteuXUmS3/3ud0mGW1Gef/75wTUf//jHV2uJAKwCiQ0AAACgWhIbAFCZMupyx44dg3N/8zd/kyT59a9/nWSYZmiOci0Jj9IAs4yL7UoorNS4sa/N92snN5rrKE1Cy7ky1rNrDG35HprjYrtes+t+81xXmqK8X19T1b179yZJzpw5s+T5aznKtWncOvrSJaW57Hp23333JUl+9KMfDc6Vvw8f+chHkiSnTp1KMtpg9Pvf/36SYYPR+++/f/6LBWBuJDYAAACAaklsAEAlXnjhhSTDZMLNN988eKyMd33rrbeSDPtOXHXVVYNrSq+BtuY199577wxXPBz7WpIbyfikRld6oPTdKGts9n0oxyVN0UynrCSp0by2jAgt5w4fPrzkdcrnKbd9yZG1TnBM0uuj3JbvtQZ/+qd/Ojj+2c9+lmT4d6f8GZZkTTJMb3QlgACoj8QGAAAAUC2JDQCoRPl1ufQDKL9MJ8OExvbt25MkH/3oR5MMe24kyV/91V+NvN5rr72WZLRXx6wnYZQpJs1kQEk2TJIeKCmM8rlK743m65Q0xyRpiEkmljQTJb///e+v+Nr79+9Pkhw/fvyK79G1jmk00zXjTPM9dK21vMcDDzywnCWuiSNHjgyOS7KppJjuuOOOJMNeG0ly++23J5l9QgmAtSGxAQAAAFRLYQMAAAColq0oAFCJxcXFkfs/+MEPBsdlC8mePXuSJKdPn04yunWhbAspSiPM5hjMruaYK/GFL3whSfKNb3xjcK5s9SjNKcvay3aaZOlWifI5mtcUXdszJmkMOm4LSt9o2q7vZ2FhYeSarm03fdaysWjX91H+XNa60elylSahzWahSfy8Wu8AAB9JSURBVPLNb35zcFy2q/zP//xPktn/vQdgdUlsAAAAANWS2ACAypRfmd94443Bueuuuy7JsGloaZx4/fXXD64pTRSL1WwO2fz1/KWXXkoyTASUxEZXeqCteb6d1Oh7fl9io520aI4ALefaaZkuXYmNSZIj4z5Pn+a17ddaboKlnViZJG1Sk7vvvrvzGID6SWwAAAAA1ZLYAIDKlH4AZVxrMhxb+eUvfzlJsnnz5iTJnXfeubqLG6OZ2HjxxReTDBMBfYmNcb02mvp6QfSNWR332Llz5wbnSr+Jdtqly65du5Ikr7zyypLXbKcgyhjbtdb1fZQ/j4MHD67JmgBgWuvj/6oAAAAAyyCxAQCVKimNpk984hNJkh/+8IdJkgMHDqzqmsbZv3//4PiJJ55IsjSx0TWNpC9x0deTou95464tt7/97W+XPHbo0KGxzy/KRJqf//znY197ucmTPn29RqZ5j/JY+RwAUAuJDQAAAKBaChsAAABAtWxFAYANZPfu3SO360Wz+WZpnFm2UJStKKVRZ5Js2fLuP1H6tnC0z3Vts5hmW0Z7a0zzXGnY2qdv3Gt7dOq0206mGQU7ib5xr80/BwCogcQGAAAAUC2JDQBgVbXHorbHjCbJtm3bRh7rShj0JTWW4/z580lG0xXTpBcefPDBJMnx48cH52a1tnnpSpc0G70CQA0kNgAAAIBqSWwAAKtq7969SZJXX301SXdvi0mSDn2jU6dRXufcuXNL3ntxcXHq1+vqA7LejBunO+4cAKxnEhsAAABAtRQ2AAAAgGrZigIArIn2loeurSir0Ty0PP/ChQtJVj7utDlq9+WXXx55j2nW2rXFZrnbbsa9b9e414WFhWW9BwCsFYkNAAAAoFoSGwDAqjpw4ECS5NixY0mSLVve/edIMylR0gN9CYe+5qHLSXE0EyMrsWfPnsHxqVOnJn7eSpugFpM0Bu26RtNQAGolsQEAAABUS2IDAFhVZYTq2bNnkyTXXXddkmFKo3m8nN4Uffpep/TYWGly4vbbb5/o/caZVXKjT9f3utLeIgCwViQ2AAAAgGpJbAAAa2Lv3r1Jkl/+8pdJRhMbJT0wyVSUSUzTq2OliYm+3hbztNL3KN9/6YECALWQ2AAAAACqpbABAAAAVMtWFABgTZQtD//3f/+XJNm0afh7yzTjXovlbiFpN81svu7hw4enfr1Dhw4NjufVBHVa47b0aB4KwEYgsQEAAABUS2IDAFgXNm/ePDhuJxsmaR663Kadb7/99sj9ZnJhpQmLssa+pMS8TJJ2aV6zb9++ua8JAOZBYgMAAAColsQGALAmSo+NY8eOJUl27tw5eKz021huwmGa68+fPz/2vZbTY6Np165dSZIzZ86MfY9ZpzmmSWp0rQMAaiOxAQAAAFRLYgMAWBMLCwtJkosXLyYZTQy0ExtFX8Jg2qko5X3L7SSTWKa1Y8eOkftd7zHPhMa4a9Z6SgsAzJLEBgAAAFAthQ0AAACgWraiAABrqoxX7duesZztFl2a21XGNQ2d5faMW2+9NUny05/+9IrvsZzP3Gfa99i/f/+K3g8A1orEBgAAAFAtiQ0AYE3t27cvSfL6668Pzo1LNnSlOqZpGtp8/rlz50bOdTX2XOm41/XWpLO9nvKZE4kNAOolsQEAAABUS2IDAFhTW7Zc+Z8jk/SmmHbcazuhUW4XFxenep1J9PXxWI00x7j3WC9JEgBYCYkNAAAAoFoSGwDAmtq5c+eSc/OaVFImsCRLp6KUx5p9J1Zqml4hs9aXbunqsQEAtZLYAAAAAKqlsAEAAABUy1YUAGBNvfPOO0m6t2dMsk1jkqah5ZqLFy+OfY+yLePQoUOTLHsiZYTqsWPHRt6ry6y2pEzyHl1bURYWFmby/gCw2iQ2AAAAgGpJbAAAa2rTpqW/s7RTGJOMSe1LbvQ9v9009PDhwxOvfVLTjHudRzNRY10B2MgkNgAAAIBqSWwAAGvi0UcfTZK8+OKLSZJt27YNHhuXcOgbYTpJr42u55XERrldjcTGLMesls+9nNc07hWAjUBiAwAAAKiWwgYAAABQLVtRAIBV9dxzzyVJnnjiiSTJtddeO/ba5TbdHNd8tGw3SYbbMMq5xcXFKT7FZMoI1b61TjLatv15mvfHPa/vPeaxJQYA1orEBgAAAFAtiQ0AYFX9y7/8S5Jk586dSYbjXjdv3nzF5/alELpSDH1piHbT0H/8x3+c4lNMZzXHvfY1WG3rGrULALXxfzMAAACgWhIbAMDcfelLXxocl7GuJaGxZcu7/xxppgfaSYK+pENfQqH0kGj302ge79u3L8l8xrwWe/bsSZL8/Oc/H1lf83iSpMY0I237vpdy29ffBABqIbEBAAAAVEtiAwCYm2effTZJ8sorrwzOtRMbXT02SjJh3HST5nHXxJOiJDUuXryYJDl79uzgsXLukUceme5DLcMkPTZW2ltjOcp3AAA1k9gAAAAAqqWwAQAAAFTLVhQAYG6+9rWvJUm2bt06OFeahfY1D21vRenamtJuENrVWLNsTylbLs6dOzd47LOf/WyS+TYNLfbu3ZskOX36dJLhmpPJRtOu1LjXbK7jmWeeSZIcOnRo5u8PAPMksQEAAABUS2IDAJibq6++OsloY9CSzGgnN5qJi3FjTfuabjYfK0mECxcuJBk2Dd21a9fgms9//vNTf57lKsmRvrVO0mB0EtMkP5opmeafEQDURGIDAAAAqJbEBgAwc88//3yS5KWXXkqS7NixY/BYO6lRUgPjUhrjHitJh3biIRkmJM6fPz9ye+TIkWk/ykw8+OCDSZLjx48nGe1tUdY6LrnRVM71fVdd2q9ZvvNmYuMnP/lJkmRxcXGq1waAtSaxAQAAAFRLYgMAmLmf/vSnSbr7Z5Rz7ds+JdXQ1E4hNFMQ7Skof/mXf5lk7dMIZV3Nz9xOanQlUMq5krDo6zXSPt+n+edS/swAoDYSGwAAAEC1FDYAAACAatmKAgDM3IsvvpikuzFoOR5329RudtncklK2Z5RzZZtHMhzzessttyRJHnjggRV9nlm57777kgybiCbD9bebiDa31rS3qTSbfo4zSYPR5jWnTp264vUAsB5JbAAAAADVktgAAGauL41RjttpjmYKod34si/V0ZVwKOmHu+++ewWfYvZKcqSZ2GgnT9r3k8lG4vZpP69r3GtpaPrv//7vI2sFgPVOYgMAAAColsQGADBzpcfGjh07kowmBsalMbrO9Y0sbSc1mgmHD37wg0mSw4cPT7321XDvvfcOjp966qkk/T02us4Vk3xX5ZqSymj3Lmk+dvTo0SQSGwDUQ2IDAAAAqJbEBgAwc31TO9oJg76kQVGuaaYy2tNQmlNR/u7v/m7KFa+u5vqefPLJJMNJLu0pKckwTTFNYqOvr0lXj40tW7aM3D766KNJkocffniKTwYAq09iAwAAAKiWwgYAAABQLVtRAICZm2Qsadk6UbZXdG1faTfN7BrpWs7ddNNNg8fWa9PQLp/61KeSJMeOHUsy3JJStp8kw8/a9b2W761vK8q40bpdzUPLVpTm+wPAeiaxAQAAAFRLYgMAmLm+xEa7aWg7udHUbqTZ1zz005/+9EqXvSbOnj2bZPj5S2Jj69atg2vKZ20nL7p0NWNtJzXKNc1URrt56OOPP54k+dznPjfV5wGA1SaxAQAAAFRLYgMAmLk9e/YkSV5++eUkowmDcYmNpnaKo2uka0kxfPjDH05SV1+NpjJO9T//8z+TLP3MyTBZ0ZfYmKSvSTux0fzu2z02SmLkq1/96uAa6Q0A1iOJDQAAAKBaEhsAwMyVJMAkyYKuxEZ7Ckp7Akoy7EVRporU7r777ksynI7SNQGmpCqaj02S1CjXjOu10XztktjYtm3bxK8PAGtJYgMAAAColsIGAAAAUC1bUQCAmSvNQ0+fPp2keztDewtK8357lGv7fpL87d/+bZJ6m4a2/f73v0/Sve2mvSWnbCVpHzd1fefjrk2WjoAtzUO//vWvD6554IEHrvApAGD1SWwAAAAA1ZLYAABmrp3G6GtA2R7tmgyTCe30wt133z245v7775/NYteJL3zhC0mS73znO0lGv4++EbntRq2TNGztSm6Uc+3RsqWZKACsVxIbAAAAQLWU4AGAmTt37lyS7lGuRV+Pjfa419tuuy3JxktpdCl9REpyoktXYqPoS8eUx7qSH+3ERrm2jH1Nkueeey5Jsri4eIVPAQCrR2IDAAAAqJbCBgAAAFAtW1EAgJk7ePBgkuTpp59O0r0lpWx1KNtNuraiFHfddddc1rke7d69O0ly5syZwblJtvRMsyWlaDYRbTchbW9NSZLnn38+ia0oAKwvEhsAAABAtSQ2AICZKw0wx6UJmtrJjebxzTffnGSYAHkvKCNum/rGvY67tpnYGJfe6Lpm3G3f6wDAWpLYAAAAAKolsQEAzFzpz9DVP6OtK4VQUgv33HPPvJa4bu3duzdJ8r//+7+Dc32JjUlSHMvRlc74yU9+MtP3AIBZkNgAAAAAqiWxAQDMXHPaRvt+OwlQkgZdPTbuuOOOeS1x3WpPhGmemySxsdLkRl+PjeaEFABYLyQ2AAAAgGopbAAAAADVshUFAJi5o0ePJuluQNk+V+43tzncdttt81vcOrewsJAkOXHixOBc3zaTWW1BGfd8I14BWO8kNgAAAIBqSWwAADO3Zcu7/8TYunXryP1kaWNRDSlHLS4uJll+g9C+ayZJX8x6bCwAzJvEBgAAAFAtiQ0AYObOnDmTJNm2bVuS0cRGSXEUJbHRTBOcOnVq3ktc9ybtpzEuzbHcVEebHhsArHcSGwAAAEC1JDYAgJnbtWtXkuS1115LMprS2L59e5JhUqOrx0Y71fFedNdddw2Oy4SUSRIWXWmMaXpr9L3H/v37r/g6ALDaJDYAAACAailsAAAAANWyFQUAmLlz586N3G+OeG2Pgr18+fLYa97Lzp49OzguW0nKd9XXPLRP+5q+55T3bF5T3h8A1hOJDQAAAKBafg4BAGbu5ZdfTpJcc801SZJLly4NHrtw4cLIteWxZsqjpASeffbZJMnBgwfnttb16pFHHhkcf+9730syTEw0kxOTjHstx10pjGkcOHBgWc8DgHmS2AAAAACqJbEBAMzMj3/84yTD9MWOHTuSjCY2Ll68mGSYOij3m0mOkix4Lyc2mu65554kybFjx5J0pzHa9/uu6dM3GradtgGA9UBiAwAAAKiWxAYAMDNlmkn51b+kMcpt87FyW9IczWvK8ebNm+e84jq88cYbSSbrsdE+v1LN9zIVBYD1SGIDAAAAqJbCBgAAAFAtW1EAgJlZWFgYuV+2Q5w/f37JuU2b3v19pWt7RfHUU08lSR566KHZL7Yi//RP/5Rk2Jx1knGvTe1xr13GPVa2FyXJ4cOHp1k2AKwKiQ0AAACgWhIbAMDMtUe6No1LFjQbhZY0x/bt25MkzzzzTJLk0KFDs19sRT75yU8mSY4fPz44Ny6xsdzkRtutt966vMUCwCqR2AAAAACqJbEBAMxcOxnQ1xOiPf41WTrm9dlnn00isXHzzTcnGY7ITYbfbd9413FJjb7kRnmOEa8ArHcSGwAAAEC1FDYAAACAatmKAgDMXGn+WZqINreWNMeHNnVtpSjPe/rpp5Mkf//3fz/TddamjFttjtU9depUkuH32rclpei7pmv7EACsZxIbAAAAQLUkNgCAmTl58mSSYWKjaDapHDeOtC+xUXz1q18dHH/uc59b2WIr1hzB+sILLyRJtm3bNpPXbjcN3b1790xeFwDmRWIDAAAAqJbEBgAwMyWZ0ZfGKEmAkuroGkXa7hdRHvvWt741uKaMPH344Ydn9wEqceTIkcHxN7/5zSTD76Or18a4Ma9dKZl2YmPfvn2zWjYAzIXEBgAAAFAtiQ0AYOZKb4xy20wMtNMDfbZu3Tpyvzmp4+qrr17JEjeMe+65J0ly4sSJJN3TTEoKo937pOua8vxxvVAAYL2R2AAAAACqpbABAAAAVMtWFABg5soWlK6tD+0tD13XlHPtJpfN8a9PPfVUkuStt95KkvzDP/zDTNZem3feeSdJcvHixSTD77W5JaV8b12NWov21pPSjHRhYWEeywaAmZHYAAAAAKolsQEAzEz5db8kBMro0XLbfKwo6YFmiqDdsLLrmpLqaL72e9GDDz6YJPmv//qvJEubfzaP20mNvsagJQECAOudxAYAAABQrff2TxwAwFx86lOfSpI8/fTTSSZLVfSNKe1KbBTTjI/dyG655ZYkyWuvvZYk2b59+9hrJ0nJ3H777bNeIgDMhcQGAAAAUC2JDQBg5kpi43vf+16S5O233x489r73vS9Jcv78+STd6YELFy4kGU7mKImPcj8Z9uo4fvx4kuThhx+e8aeoS0lYnDlzJsnod7V169YrPr98/yU5s3v37lkvEQDmQmIDAAAAqJbCBgAAAFAtW1EAgLn58z//8yTJ888/Pzj3zjvvJBluN7n66quTjG6dKA0wP/ShDyVJfvWrXyVJbrjhhsE1ZXtF38jS95KyFeVb3/pWku5xr0Vf89Dy57Bv3775LRYAZkhiAwAAAKiWxAYAMDdHjhxJkhw8eHBw7ujRo0mGzT9Ls8ubbrppcM0111yTJNmxY0eS4ejS6667bnDNtddemyS5ePHiXNZem0OHDiXpTrD0jcst2okNAKiFxAYAAABQLYkNAGDu/uRP/mRw/M///M9Jhr0grr/++iTD3hvJsJdGeezGG29Mktx7772Da0ri45lnnpnXsqtUkhfN5EZJamzadOXftEoCZmFhYQ6rA4DZk9gAAAAAqiWxAQCsib/+678euT158uTgsQMHDiRJXn755STJbbfdNvZ1PvzhD89ngZXavXt3kuEkmWSY1Jimx8aPf/zjJMkdd9wxl3UCwKxIbAAAAADVUtgAAAAAqmUrCgCwLpTtJ019W1Do1jXutShbUrquKefKdpXnnnsuia0oAKx/EhsAAABAtSQ2AAA2kBdeeCHJcFRuMkxqlNvLly+PfX65ZssW/0wEoA4SGwAAAEC1lOIBADa40jejpDHa59vHSfKzn/1s/gsDgBmQ2AAAAACqpbABAAAAVMtWFACADahrm8m422Q47nXz5s1Jlm5bAYD1yv+xAAAAgGpJbAAAbCB79uxJkrz55ptXvLakNJJhQqOkOMrYWABY7yQ2AAAAgGpJbAAAbCCXL19Okly6dGlwrhyX25LUaCY2mseJHhsA1MP/sQAAAIBqSWwAAGwge/fuTZJ85zvfGZwrSY2LFy8mGaYzmqmOCxcujDxWem089thjg2seeuiheS0bAJZNYgMAAAColsIGAAAAUC1bUQAANpB9+/YlSU6cODE4d/78+ZFrynaT5vl289DNmzeP3ALAeiWxAQAAAFRLYgMAYAPZv39/kuTs2bODczt37kyydMxrM6XRHgVbxr3+x3/8x+CaBx54YF7LBoBlk9gAAAAAqiWxAQCwAV2+fHlwfO7cuSSj412T0cRGGQVbrinPL8mNZDj61dhXANYTiQ0AAACgWhIbAAAbUDOdUfpt9E06KemNq666auT8li3Dfy62HwOA9UBiAwAAAKiWwgYAAABQLVtRAAA2oN27dw+OT58+nWS4laQ0BG1uLWmPgO3advL4448nSR588ME5rBgAlkdiAwAAAKiWxAYAwAbUNcq1ndhojnJtP68ruVEaiRr7CsB6IrEBAAAAVEtiAwBgA9q3b9/g+IUXXkgyHPPaTHNMo6Q3Sq+NAwcODB5bXFxc1msCwEpJbAAAAADVktgAANiALl26NDi+fPlykmFSo9zv6rFRUhldU1HK9SX5cfLkycFjEhsArBWJDQAAAKBaChsAAABAtWxFAQDYgBYWFgbHTz75ZJLhFpKubSbjNK9tj4s9evTo4DGjXwFYKxIbAAAAQLUkNgAANqCSzkiGzUJL4qKreWi7kWg7nZEMm4+W1966devgscceeyyJ5AYAq09iAwAAAKiWxAYAwAb0b//2b4PjkqwoSYuuMa9tfeNei5LgSJLHH388icQGAKtPYgMAAAColsQGAMAGtH379sHxli3v/pNvmsRGl/K8kuZopjpKeuPkyZNJkgMHDizrPQBgWhIbAAAAQLUUNgAAAIBq2YoCALABNbeblC0oXVtIimYj0HHaI2Cb73Hp0qXlLxYAVkBiAwAAAKiWxAYAwAZUmngmyTXXXJNkmMroSmf0Pda+pnjrrbcGx+9///uTaBoKwOqT2AAAAACqJbEBALAB3X///YPj48ePJ5ksjdGX3Lj22muTJGfPnk0yHCObJH/wB3+wwhUDwPJIbAAAAADVUtgAAAAAqmUrCgDABnT58uXB8cWLF0ceO3/+fJJhU9Hm9WVs67Zt20buJ8nvfve7JMn27duTJDt27Bg8duedd85s7QAwDYkNAAAAoFoSGwAAG1Cz+efmzZtHHtu0aelvWyWxUZ5XGoQ2m4KWxMYHP/jBJMmRI0cGj+3bt28WywaAqUlsAAAAANWS2AAA2IAWFhYGxydOnEgy7IlR+mb85je/GVzzh3/4hyOPvfnmm0mSm266aXDNrbfemiT5yEc+kkRKA4D1QWIDAAAAqNZVzf2XcAX+sgBAhf71X/81yXAaypYt74Z2t27dOrjm17/+dZJk586dSZIbbrghSXLttdcOrvmzP/uzJMntt98+5xUDUJmr1vLNJTYAAACAailsAAAAANWyFYVp+MsCABX7yle+kiTZvXt3kuRjH/vYkmvOnDmTJHn77beTJPv371+l1QFQMVtRAAAAAJZDYoNp+MsCAABAm8QGAAAAwHIobAAAAADVUtgAAAAAqqWwAQAAAFRLYQMAAAColsIGAAAAUC2FDQAAAKBaChsAAABAtRQ2AAAAgGopbAAAAADVUtgAAAAAqqWwAQAAAFRLYQMAAAColsIGAAAAUC2FDQAAAKBaChsAAABAtRQ2AAAAgGopbAAAAADVUtgAAAAAqqWwAQAAAFRLYQMAAAColsIGAAAAUC2FDQAAAKBaChsAAABAtRQ2AAAAgGopbAAAAADVUtgAAAAAqqWwAQAAAFRLYQMAAAColsIGAAAAUC2FDQAAAKBaChsAAABAtRQ2AAAAgGopbAAAAADVUtgAAAAAqqWwAQAAAFRLYQMAAAColsIGAAAAUC2FDQAAAKBaChsAAABAtRQ2AAAAgGopbAAAAADVUtgAAAAAqqWwAQAAAFRLYQMAAAColsIGAAAAUC2FDQAAAKBaChsAAABAtRQ2AAAAgGopbAAAAADVUtgAAAAAqqWwAQAAAFRLYQMAAAColsIGAAAAUC2FDQAAAKBaChsAAABAtRQ2AAAAgGopbAAAAADVUtgAAAAAqqWwAQAAAFRLYQMAAAColsIGAAAAUC2FDQAAAKBaChsAAABAtRQ2AAAAgGopbAAAAADVUtgAAAAAqqWwAQAAAFRLYQMAAAColsIGAAAAUC2FDQAAAKBaChsAAABAtRQ2AAAAgGopbAAAAADVUtgAAAAAqqWwAQAAAFRLYQMAAAColsIGAAAAUC2FDQAAAKBaChsAAABAtRQ2AAAAgGopbAAAAADVUtgAAAAAqqWwAQAAAFRLYQMAAAColsIGAAAAUC2FDQAAAKBaChsAAABAtRQ2AAAAgGopbAAAAADVUtgAAAAAqqWwAQAAAFRLYQMAAAColsIGAAAAUK0ta70AqnLVWi8AAAAAmiQ2AAAAgGopbAAAAADVUtgAAAAAqqWwAQAAAFRLYQMAAAColsIGAAAAUC2FDQAAAKBaChsAAABAtRQ2AAAAgGopbAAAAADVUtgAAAAAqqWwAQAAAFRLYQMAAAColsIGAAAAUC2FDQAAAKBaChsAAABAtRQ2AAAAgGopbAAAAADVUtgAAAAAqqWwAQAAAFRLYQMAAAColsIGAAAAUC2FDQAAAKBaChsAAABAtRQ2AAAAgGopbAAAAADVUtgAAAAAqqWwAQAAAFRLYQMAAAColsIGAAAAUC2FDQAAAKBaChsAAABAtRQ2AAAAgGopbAAAAADVUtgAAAAAqqWwAQAAAFRLYQMAAAColsIGAAAAUC2FDQAAAKBaChsAAABAtRQ2AAAAgGopbAAAAADVUtgAAAAAqqWwAQAAAFRLYQMAAAColsIGAAAAUC2FDQAAAKBaChsAAABAtRQ2AAAAgGopbAAAAADVUtgAAAAAqqWwAQAAAFRLYQMAAAColsIGAAAAUC2FDQAAAKBaChsAAABAtRQ2AAAAgGopbAAAAADVUtgAAAAAqqWwAQAAAFRLYQMAAAColsIGAAAAUC2FDQAAAKBaChsAAABAtRQ2AAAAgGopbAAAAADVUtgAAAAAqqWwAQAAAFRLYQMAAAColsIGAAAAUC2FDQAAAKBaChsAAABAtRQ2AAAAgGopbAAAAADVUtgAAAAAqqWwAQAAAFRLYQMAAAColsIGAAAAUC2FDQAAAKBaChsAAABAtRQ2AAAAgGopbAAAAADVUtgAAAAAqqWwAQAAAFRLYQMAAAColsIGAAAAUC2FDQAAAKBaChsAAABAtRQ2AAAAgGopbAAAAADVUtgAAAAAqqWwAQAAAFRLYQMAAAColsIGAAAAUC2FDQAAAKBaChsAAABAtRQ2AAAAgGopbAAAAADVUtgAAAAAqqWwAQAAAFTr/wEujeBcYevvJQAAAABJRU5ErkJggg==\n",
      "text/plain": [
       "<Figure size 1200x1200 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "#Sample a 32 dimentional vector from a Normal distribution\n",
    "poZ_body_sample = torch.from_numpy(np.random.randn(1,32).astype(np.float32)).to('cuda')\n",
    "pose_body = vp.decode(poZ_body_sample, output_type='aa').view(-1, 63)\n",
    "\n",
    "print('poZ_body_sample.shape', poZ_body_sample.shape)\n",
    "print('pose_body.shape', pose_body.shape)\n",
    "\n",
    "images = render_smpl_params(bm, pose_body).reshape(1,1,1,400,400,3)\n",
    "img = imagearray2file(images)\n",
    "show_image(np.array(img)[0])"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "Above we drawn a sample from a 32 dimentional Normal distribution and decoded its value to a full 63 dimentional SMPL body pose vector. The generated image shows the corresponding rendered body."
   ]
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python 3",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.7.3"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 2
}
